package cn.itcast.web.controller.system;

import cn.itcast.domain.system.Dept;
import cn.itcast.service.system.DeptService;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;


import java.util.HashMap;
import java.util.List;
import java.util.Map;
//部门管理
@Controller
@RequestMapping("/system/dept")
public class DeptController extends BaseController {
    @Autowired
    private DeptService deptService;

    /**
     * 分页查询部门
     * 1）方法的访问路径 http://localhost:8080/system/dept/list.do
     * 2）方法的参数
     * 3）方法的返回内容： "system/dept/dept-list"
     */
    @RequestMapping("/list")
    public String list(@RequestParam(defaultValue = "1") int pageNum,
                       @RequestParam(defaultValue = "5") int pageSize) {
        //获取企业id
        String companyId =getLoginCompanyId() ;
        //1.调用业务获取数据
        PageInfo pageInfo = deptService.findByPage(pageNum, pageSize, companyId);

        //2.存入request域中，提供给页面显示
        request.setAttribute("pageInfo", pageInfo);

        return "system/dept/dept-list";
    }

    /**
     * 进入添加部门页面
     * 1）方法的访问路径    http://localhost:8080/system/dept/toAdd.do
     * 2）方法的参数
     * 3）方法的返回内容： 页面地址/对象
     */
    @RequestMapping("/toAdd")
    public String toAdd() {
        //获取企业id
        String companyId = getLoginCompanyId();
        List<Dept> deptList = deptService.findAll(companyId);
        request.setAttribute("deptList", deptList);
        return "system/dept/dept-add";
    }

    /**
     *添加部门
     * 1）方法的访问路径    http://localhost:8080/system/dept/edit.do
     * 2）方法的参数
     * 3）方法的返回内容： "redirect:/system/dept/list.do"
     */
    @RequestMapping("/edit")
    public String edit(Dept dept){
        //获取登录企业信息
        String companyId = getLoginCompanyId();
        String companyName = getLoginCompanyName();
        //把企业信息存入对象
        dept.setCompanyId(companyId);
        dept.setCompanyName(companyName);
        //判断父工程是否为空串，如果是赋值为null，因为部门id没有空串
        if (dept.getParent().getId()==""||dept.getParent().getId()==null){
            dept.getParent().setId(null);
        }
        //1.判断是否为修改操作
        if(StringUtils.isEmpty(dept.getId())){
            //添加
            deptService.save(dept);
        }else{
            //修改
            deptService.update(dept);
        }

        return  "redirect:/system/dept/list.do";
    }
       /**
     *
     */
       @RequestMapping("/toUpdate")
    public String  toUpdate(String id){
           //获取登录企业信息
           String companyId = getLoginCompanyId();
           //根据id查询部门
           Dept dept=deptService.findById(id);
           //查所有部门
           List<Dept>deptList=deptService.findAll(companyId);
           //将数据存入域中
           request.setAttribute("dept",dept);
           request.setAttribute("deptList",deptList);
           return "/system/dept/dept-update";
       }
    /**
     * 部门删除
     *  路径：http://localhost:8080/system/dept/delete.do
     *  参数：id=1
     *  返回：json格式
     *      {
     *          flag:true/false,
     *          message:'删除成功'
     *      }
     */
    @RequestMapping("/delete")
    @ResponseBody // @ResponseBody该注解可以让方法的返回值转换为Json字符串
    public Map<String,Object> delete(String id){
        //1.设计返回数据对象
        Map<String,Object> result = new HashMap<>();

        //2.调用业务
        boolean flag = deptService.delete(id);
        if(flag){
            result.put("flag",true);
            result.put("message","删除成功");
        }else{
            result.put("flag",false);
            result.put("message","删除失败：存在子部门");
        }

        //3.返回结果
        return result;
    }
}
